#!/bin/sh

export LC_ALL=POSIX
export LC_CTYPE=POSIX

prefix=${1}
if [ -z "$prefix" ]; then
	echo "usage: applets/install.sh DESTINATION [--symlinks/--hardlinks]"
	exit 1;
fi

h=`sort busybox.links | uniq`
cleanup="0"
noclobber="0"
case "$2" in
	--hardlinks) linkopts="-f";;
	--symlinks)  linkopts="-fs";;
	--cleanup)   cleanup="1";;
	--noclobber) noclobber="1";;
	"")          h="";;
	*)           echo "Unknown install option: $2"; exit 1;;
esac

if [ -n "$DO_INSTALL_LIBS" ] && [ "$DO_INSTALL_LIBS" != "n" ]; then
	# get the target dir for the libs
	# assume it starts with lib
	libdir=$($CC -print-file-name=libc.so | \
		 sed -n 's%^.*\(/lib[^\/]*\)/libc.so%\1%p')
	if test -z "$libdir"; then
		libdir=/lib
	fi

	mkdir -p $prefix/$libdir || exit 1
	for i in $DO_INSTALL_LIBS; do
		rm -f $prefix/$libdir/$i || exit 1
		if [ -f $i ]; then
			cp -a $i $prefix/$libdir/ || exit 1
			chmod 0644 $prefix/$libdir/$i || exit 1
		fi
	done
fi

if [ "$cleanup" = "1" ] && [ -e "$prefix/bin/busybox" ]; then
	inode=`ls -i "$prefix/bin/busybox" | awk '{print $1}'`
	sub_shell_it=`
	cd "$prefix"
	for d in usr/sbin usr/bin sbin bin; do
		pd=$PWD
		if [ -d "$d" ]; then
			cd $d
			ls -iL . | grep "^ *$inode" | awk '{print $2}' | env -i xargs rm -f
		fi
		cd "$pd"
	done
	`
fi

rm -f $prefix/bin/busybox || exit 1
mkdir -p $prefix/bin || exit 1
install -m 755 busybox $prefix/bin/busybox || exit 1

for i in $h; do
	appdir=`dirname $i`
	mkdir -p $prefix/$appdir || exit 1
	if [ "$2" = "--hardlinks" ]; then
		bb_path="$prefix/bin/busybox"
	else
		case "$appdir" in
		/)
			bb_path="bin/busybox"
		;;
		/bin)
			bb_path="busybox"
		;;
		/sbin)
			bb_path="../bin/busybox"
		;;
		/usr/bin|/usr/sbin)
			bb_path="../../bin/busybox"
		;;
		*)
		echo "Unknown installation directory: $appdir"
		exit 1
		;;
		esac
	fi
	if [ "$noclobber" = "0" ] || [ ! -e "$prefix$i" ]; then
		echo "  $prefix$i -> $bb_path"
		ln $linkopts $bb_path $prefix$i || exit 1
	else
		echo "  $prefix$i already exists"
	fi
done

echo "Additional additions ( 创建额外文件 ) ..."

current_dir=$(pwd)
echo "当前目录为：$current_dir"

#mdev
user_name="lihao"
user_password="p081742lh"
mkdir -p $prefix/dev || exit 1
echo "$user_password" | sudo -S mknod $prefix/dev/console c 5 1
echo "$user_password" | sudo -S mknod $prefix/dev/null c 1 3

#添加配置文件
mkdir -p $prefix/etc || exit 1
cp -R ./etc/* $prefix/etc

#构建其他目录
mkdir -p $prefix/proc || exit 1
mkdir -p $prefix/mnt || exit 1
mkdir -p $prefix/tmp || exit 1
mkdir -p $prefix/sys || exit 1
mkdir -p $prefix/root || exit 1

#复制lib
echo "Copy lib..."
mkdir -p $prefix/lib || exit 1
lib_path=$(which arm-linux-gcc | sed 's/\/bin\/arm-linux-gcc//g')
# eg: /home/lihao/work/crosstool_on_ubuntu_7.10/build_result/gcc-3.4.5-glibc-2.3.6/bin/arm-linux-gcc
# result: /home/lihao/work/crosstool_on_ubuntu_7.10/build_result/gcc-3.4.5-glibc-2.3.6/
cp $lib_path/arm-linux/lib/*.so* $prefix/lib -d

rm -f ./fs_mini_*.yaffs2

random_string=$(date +%s%N | md5sum | head -c16)
echo "文件系统名称随机字符串：$random_string"

create_file_name="fs_mini_$random_string.yaffs2"
#create_file_name="fs_mini_$random_string.yaffs"

#构建文件系统
echo "Build fs..."
mkyaffs2image $prefix $create_file_name || exit 1
#mkyaffsimage $prefix $create_file_name
echo "--- Build Over ---"

echo "$create_file_name 位于: $current_dir"

#将文件提交到服务器: http
cp $current_dir/$create_file_name /home/lihao/web/fs
chmod a+r /home/lihao/web/fs/$create_file_name
commit_msg=$(git show -s --format=%s master^{commit})
file_bytes=$(du --bytes $create_file_name | cut -f1)

#发送http请求，保存最小文件系统
curl \
-X POST \
-d "from=ubunu7.10&name=$create_file_name&commit=$commit_msg&fileBytes=$file_bytes" \
http://192.168.101.118:3017/linux/fs

echo "\n"
echo "--- upload over ---"

#ubuntu配置信息
#nfs挂载点： /home/lihao/work/100ask_v3/busybox-1.7.0-100ask/fs_mini_dir
#nfs配置文件在： sudo vim /etc/exports
#追加配置文件：/home/lihao/work/100ask_v3/busybox-1.7.0-100ask/fs_mini_dir *(rw,sync,no_root_squash,no_subtree_check)
#重启nfs服务：sudo /etc/init.d/nfs-kernel-server restart

#设置u-boot启动参数：setenv bootargs root=/dev/nfs rw nfsroot=192.168.42.100:/home/lihao/work/100ask_v3/busybox-1.7.0-100ask/fs_mini_dir ip=192.168.42.130:192.168.42.100:192.168.42.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200
#保存环境变量： save



exit 0
